๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ์ ํ์ผ๋ก ๊ฒฌ๊ณ ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ์ธ์. ์ ์ง์ ํฅ์, ์ฐ์ํ JS ์ ํ, ๊ทธ๋ฆฌ๊ณ ์ ์ธ๊ณ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํ ์ค์ฉ์ ์ธ ์ ๋ต์ ํ๊ตฌํฉ๋๋ค.
๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ ์ ์ง์ ํฅ์: ๊ฒฌ๊ณ ํ ์น์ ์ํ ์ฐ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ
์ ์ ๋ ์ํธ ์ฐ๊ฒฐ๋๋ฉด์๋ ๋ค์ํ ๋์งํธ ์ธ์์์, ์น์ ๋๋ผ์ธ ์ ๋๋ก ๋ค์ํ ๊ธฐ๊ธฐ, ๋งค์ฐ ๋ค๋ฅธ ๋คํธ์ํฌ ์กฐ๊ฑด, ๊ทธ๋ฆฌ๊ณ ๊ด๋ฒ์ํ ๋ฅ๋ ฅ๊ณผ ์ ํธ๋ฅผ ๊ฐ์ง ์ฌ์ฉ์๋ค์ ์ํด ์ ๊ทผ๋ฉ๋๋ค. ๋ชจ๋ ์ฌ๋์๊ฒ, ์ด๋์๋ ์ผ๊ด๋๊ฒ ๋์ ํ์ง์ ๊ฒฝํ์ ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๊ฒ์ ๋จ์ง ๋ชจ๋ฒ ์ฌ๋ก๊ฐ ์๋๋ผ, ๊ธ๋ก๋ฒ ๋๋ฌ๊ณผ ์ฑ๊ณต์ ์ํ ํ์ ์๊ฑด์ ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ๋ฆฌ์กํธ ์ํ๊ณ์ ์ค์ถ์ ์ธ ๋ฐ์ ์ธ ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ(RSC)๋ฅผ ํ์ฉํ์ฌ ์ ์ง์ ํฅ์๊ณผ ์ฐ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ ์์น์ ์ง์งํ๊ณ , ๋ ๊ฒฌ๊ณ ํ๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฉฐ ๋ณดํธ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ ์น์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๊น์ด ์๊ฒ ๋ค๋ฃน๋๋ค.
์์ญ ๋ ๋์ ์น ๊ฐ๋ฐ์๋ค์ ํ๋ถํ ์ํธ์์ฉ์ฑ๊ณผ ๊ธฐ์ด์ ์ธ ์ ๊ทผ์ฑ ์ฌ์ด์ ์ ์ถฉ์ ์ ๋๊ณ ๊ณ ์ฌํด์์ต๋๋ค. ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA)์ ๋ฑ์ฅ์ ๋นํ ๋ฐ ์๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ธ์์ง๋ง, ์ข ์ข ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ, ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์กด์ฑ, ๊ทธ๋ฆฌ๊ณ ์์ ํ ์๋ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง ์์ด๋ ๋ฌด๋์ ธ๋ฒ๋ฆฌ๋ ๊ธฐ๋ณธ ๊ฒฝํ์ ํฌ์ํด์ผ ํ์ต๋๋ค. ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๋ ๊ฐ๋ฐ์๋ค์ด ๋ ๋๋ง๊ณผ ๋ฐ์ดํฐ ํ์นญ์ ๋ค์ ์๋ฒ๋ก '์ด๋'์ํค๋ฉด์๋ ๋ฆฌ์กํธ๊ฐ ์๋ํ๋ ๊ฐ๋ ฅํ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๊ณ์ ์ ๊ณตํ ์ ์๊ฒ ํ๋ ๊ฐ๋ ฅํ ํจ๋ฌ๋ค์ ์ ํ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ์ฌ์กฐ์ ์ ์ง์ ํ ์ ์ง์ ํฅ์์ ์ํ ๊ฐ๋ ฅํ ๋๋ ฅ์ด ๋์ด, ํด๋ผ์ด์ธํธ ์ธก์ ๋ฅ๋ ฅ๊ณผ ์๊ด์์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ์ฝํ ์ธ ์ ๊ธฐ๋ฅ์ด ํญ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
์งํํ๋ ์น ํ๊ฒฝ๊ณผ ๊ฒฌ๊ณ ์ฑ์ ํ์์ฑ
๊ธ๋ก๋ฒ ์น ์ํ๊ณ๋ ๋์กฐ์ ์ธ ๋ชจ์ต์ผ๋ก ์ง์ฌ ์์ต๋๋ค. ์ต์ ์ค๋งํธํฐ์์ ๊ด์ฌ์ ์ฐ๊ฒฐ์ ์ฌ์ฉํ๋ ๋ฒํํ ๋๋์์ ์ฌ์ฉ์์, ๋ก์ ํผ์ฒํฐ ๋ธ๋ผ์ฐ์ ์์ ๋ถ์์ ํ ๋ชจ๋ฐ์ผ ์ฐ๊ฒฐ์ ํตํด ์ธํฐ๋ท์ ์ ์ํ๋ ์ธ๋ด ๋ง์์ ์ฌ์ฉ์๋ฅผ ๋น๊ตํด ๋ณด์ธ์. ๋ ์ฌ์ฉ์ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝํ์ ๋๋ฆด ์๊ฒฉ์ด ์์ต๋๋ค. ์ ํต์ ์ธ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง(CSR)์ ํ์์ ์๋๋ฆฌ์ค์์ ์ข ์ข ์คํจํ์ฌ, ๋น ํ๋ฉด, ๊นจ์ง ์ํธ์์ฉ, ๋๋ ์ข์ ๊ฐ์ ์ฃผ๋ ๋๋ฆฐ ๋ก๋ฉ์ผ๋ก ์ด์ด์ง๋๋ค.
์์ํ๊ฒ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์ ๊ทผ ๋ฐฉ์์ ๋ฌธ์ ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ฑ๋ฅ ๋ณ๋ชฉ ํ์: ํฐ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ์ํธ์์ฉ๊น์ง์ ์๊ฐ(TTI)์ ํฌ๊ฒ ์ง์ฐ์์ผ ์ฝ์ด ์น ๋ฐ์ดํ๊ณผ ์ฌ์ฉ์ ์ฐธ์ฌ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
- ์ ๊ทผ์ฑ ์ฅ๋ฒฝ: ๋ณด์กฐ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ ๋ณด์, ์ฑ๋ฅ, ๋๋ ์ ํธ๋ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋นํ์ฑํํ๊ณ ๋ธ๋ผ์ฐ์งํ๋ ์ฌ์ฉ์๋ค์ ์ฌ์ฉํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง๋ฉดํ ์ ์์ต๋๋ค.
- SEO ํ๊ณ: ๊ฒ์ ์์ง์ด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํฌ๋กค๋งํ๋ ๋ฅ๋ ฅ์ด ํฅ์๋๊ณ ์์ง๋ง, ์๋ฒ์์ ๋ ๋๋ง๋ ๊ธฐ๋ณธ ์ฝํ ์ธ ๋ ์ฌ์ ํ ๊ฒ์ ๊ฐ๋ฅ์ฑ์ ์ํ ๊ฐ์ฅ ์ ๋ขฐํ ์ ์๋ ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค.
- ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ: ํด๋ผ์ด์ธํธ์์ ๊ฐ์ ธ์ค๋ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ์ดํธ์ ๋ชจ๋ ๋ฐ์ดํฐ ํ์นญ์ ์ฌ์ฉ์์ ๋คํธ์ํฌ ์๋์ ์ํฅ์ ๋ฐ์ผ๋ฉฐ, ์ด๋ ์ ์ธ๊ณ์ ์ผ๋ก ๋งค์ฐ ๊ฐ๋ณ์ ์ผ ์ ์์ต๋๋ค.
๋ฐ๋ก ์ด ์ง์ ์์ ์ ์ง์ ํฅ์๊ณผ ์ฐ์ํ ์ ํ๋ผ๋ ์ ์ ๊น์ ๊ฐ๋ ์ด ๊ณผ๊ฑฐ์ ์ ๋ฌผ์ด ์๋, ํ์์ ์ธ ํ๋ ๊ฐ๋ฐ ์ ๋ต์ผ๋ก ๋ค์ ๋ฑ์ฅํฉ๋๋ค. ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๋ ์ค๋๋ ์ ์ ๊ตํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด๋ฌํ ์ ๋ต์ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ ์ ์๋ ์ํคํ ์ฒ์ ์ค์ถ๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํ๋์ ๋งฅ๋ฝ์์ ์ ์ง์ ํฅ์ ์ดํดํ๊ธฐ
์ ์ง์ ํฅ์์ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋ณดํธ์ ์ธ ๊ธฐ๋ณธ ๊ฒฝํ์ ์ ๊ณตํ๊ณ , ๊ทธ ์์ ๋ ๋ฐ์ด๋ ๋ธ๋ผ์ฐ์ ์ ๋น ๋ฅธ ์ฐ๊ฒฐ์ ๊ฐ์ง ์ฌ์ฉ์๋ค์ ์ํด ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ๊ณผ ํ๋ถํ ๊ฒฝํ์ ๊ณ์ธต์ ์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ์ ์นํธํ๋ ๋์์ธ ์ฒ ํ์ ๋๋ค. ์ด๋ ๊ฒฌ๊ณ ํ๊ณ ์ ๊ทผ ๊ฐ๋ฅํ ํต์ฌ์์๋ถํฐ ๋ฐ๊นฅ์ผ๋ก ๊ตฌ์ถํด ๋๊ฐ๋ ๊ฒ์ ๋๋ค.
์ ์ง์ ํฅ์์ ํต์ฌ ์์น์ ์ธ ๊ฐ์ง ๋๋ ทํ ๊ณ์ธต์ ํฌํจํฉ๋๋ค:
- ์ฝํ ์ธ ๊ณ์ธต (HTML): ์ด๊ฒ์ด ์ ๋์ ์ธ ๊ธฐ์ด์ ๋๋ค. ์๋งจํฑํ๊ฒ ํ๋ถํ๊ณ , ์ ๊ทผ ๊ฐ๋ฅํ๋ฉฐ, CSS๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์กดํ์ง ์๊ณ ํต์ฌ ์ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๋ฌํด์ผ ํฉ๋๋ค. ๊ฐ๋จํ ๊ธฐ์ฌ, ์ ํ ์ค๋ช , ๋๋ ๊ธฐ๋ณธ์ ์ธ ํผ์ ์์ํด ๋ณด์ธ์.
- ํํ ๊ณ์ธต (CSS): ์ฝํ ์ธ ๊ฐ ์ค๋น๋๋ฉด, CSS๋ ์๊ฐ์ ๋งค๋ ฅ๊ณผ ๋ ์ด์์์ ํฅ์์ํต๋๋ค. ์ด๋ ๊ฒฝํ์ ์๋ฆ๋ต๊ฒ ๊พธ๋ฉฐ ๋ ๋งค๋ ฅ์ ์ด๊ณ ์ฌ์ฉ์ ์นํ์ ์ผ๋ก ๋ง๋ค์ง๋ง, ์ฝํ ์ธ ๋ CSS ์์ด๋ ์ฌ์ ํ ์ฝ๊ณ ๊ธฐ๋ฅํ ์ ์์ต๋๋ค.
- ๋์ ๊ณ์ธต (์๋ฐ์คํฌ๋ฆฝํธ): ์ด๊ฒ์ด ๋ง์ง๋ง ๊ณ์ธต์ผ๋ก, ๊ณ ๊ธ ์ํธ์์ฉ, ๋์ ์ ๋ฐ์ดํธ, ๋ณต์กํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๊ฒฐ์ ์ ์ผ๋ก, ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋๋๊ฑฐ๋ ์คํ๋์ง ์๋๋ผ๋ ์ฌ์ฉ์๋ ์ฌ์ ํ HTML๊ณผ CSS ๊ณ์ธต์ด ์ ๊ณตํ๋ ์ฝํ ์ธ ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ฐ์ํ ์ ํ(Graceful Degradation)๋ ์ข ์ข ์ ์ง์ ํฅ์๊ณผ ํผ์ฉ๋์ง๋ง, ๋ฏธ๋ฌํ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ์ ์ง์ ํฅ์์ ๋จ์ํ ๊ธฐ๋ฐ์์๋ถํฐ ์์ ์ฌ๋ฆฝ๋๋ค. ์ฐ์ํ ์ ํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ด ๊ฐ์ถฐ์ง ํฅ์๋ ๊ฒฝํ์์ ์์ํ์ฌ, ๋ง์ฝ ํน์ ๊ณ ๊ธ ๊ธฐ๋ฅ(์: ์๋ฐ์คํฌ๋ฆฝํธ)์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ ์ ๊ตํ์ง๋ง ์ฌ์ ํ ์๋ํ๋ ๋ฒ์ ์ผ๋ก ์ฐ์ํ๊ฒ ๋์ฒด๋ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด ๋ ์ ๊ทผ ๋ฐฉ์์ ์ํธ ๋ณด์์ ์ด๋ฉฐ ์ข ์ข ํจ๊ป ๊ตฌํ๋์ด, ๊ฒฌ๊ณ ์ฑ๊ณผ ์ฌ์ฉ์ ํฌ์ฉ์ฑ์ ๋ชฉํ๋ก ํฉ๋๋ค.
ํ๋ ์น ๊ฐ๋ฐ, ํนํ ๋ฆฌ์กํธ์ ๊ฐ์ ํ๋ ์์ํฌ์ ๋งฅ๋ฝ์์, ๊ฐ๋ฐ์ ๊ฒฝํ์ด๋ ๊ณ ๋์ ์ํธ์์ฉ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ ๋ฅ๋ ฅ์ ํฌ์ํ์ง ์์ผ๋ฉด์ ์ด๋ฌํ ์์น์ ์งํค๋ ๊ฒ์ด ๋์ ๊ณผ์ ์์ต๋๋ค. ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๋ ์ด ๋ฌธ์ ๋ฅผ ์ ๋ฉด์ผ๋ก ํด๊ฒฐํฉ๋๋ค.
๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ(RSC)์ ๋ถ์
๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํคํ ์ฒ ๋ฐฉ์์ ๊ทผ๋ณธ์ ์ธ ๋ณํ๋ฅผ ๋ํ๋ ๋๋ค. ๋ ๋๋ง๊ณผ ๋ฐ์ดํฐ ํ์นญ์ ์ํด ์๋ฒ๋ฅผ ๋ ๊ด๋ฒ์ํ๊ฒ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋์ ๋ RSC๋ ๊ฐ๋ฐ์๋ค์ด ์๋ฒ์์๋ง ์คํ๋๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ๊ฒฐ๊ณผ์ธ HTML๊ณผ CSS(๊ทธ๋ฆฌ๊ณ ์ต์ํ์ ํด๋ผ์ด์ธํธ ์ธก ์ง์นจ)๋ง์ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ผ ์ ์๊ฒ ํด์ค๋๋ค.
RSC์ ์ฃผ์ ํน์ง:
- ์๋ฒ ์ฌ์ด๋ ์คํ: RSC๋ ์๋ฒ์์ ํ ๋ฒ ์คํ๋์ด, ๋ฏผ๊ฐํ ์๊ฒฉ ์ฆ๋ช ์ ํด๋ผ์ด์ธํธ์ ๋ ธ์ถํ์ง ์๊ณ ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ, ์์ ํ API ํธ์ถ, ํจ์จ์ ์ธ ํ์ผ ์์คํ ์์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ์ปดํฌ๋ํธ์ ์ ๋ก ๋ฒ๋ค ์ฌ์ด์ฆ: RSC์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ํด๋ผ์ด์ธํธ๋ก ์ ์ก๋์ง ์์ต๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ํฌ๊ฒ ์ค์ฌ ๋ ๋น ๋ฅธ ๋ค์ด๋ก๋์ ํ์ฑ ์๊ฐ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ: RSC๋ ๋ฐ์ดํฐ๊ฐ ์ค๋น๋๋ ์ฆ์ ๋ ๋๋ง๋ ์ถ๋ ฅ์ ํด๋ผ์ด์ธํธ๋ก ์คํธ๋ฆฌ๋ฐํ ์ ์์ด, ์ ์ฒด ํ์ด์ง ๋ก๋๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ UI์ ์ผ๋ถ๊ฐ ์ ์ง์ ์ผ๋ก ๋ํ๋๊ฒ ํ ์ ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์ํ ๋๋ ํจ๊ณผ ์์: RSC๋ ํด๋ผ์ด์ธํธ์์ ๋ฆฌ๋ ๋๋ง๋๊ฑฐ๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์ํธ์์ฉ์ ๊ด๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์ `useState`, `useEffect`, ๋๋ `useRef`์ ๊ฐ์ ํ ์ด ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์ ํตํฉ: RSC๋ ์์ ์ ํธ๋ฆฌ ๋ด์์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ(`"use client"`๋ก ํ์๋จ)๋ฅผ ๋ ๋๋งํ๊ณ , props๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. ์ด ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ค์ ํด๋ผ์ด์ธํธ์์ ํ์ด๋๋ ์ด์ ๋์ด ์ํธ์์ฉ ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค.
์๋ฒ ์ปดํฌ๋ํธ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ๊ตฌ๋ถ์ ๋งค์ฐ ์ค์ํฉ๋๋ค:
- ์๋ฒ ์ปดํฌ๋ํธ: ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ ์ ๋๋ ๋์ HTML์ ๋ ๋๋งํ๋ฉฐ, ์๋ฒ์์ ์คํ๋๊ณ , ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ด ์์ผ๋ฉฐ, ์์ฒด์ ์ผ๋ก๋ ์ํธ์์ฉ์ด ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ: ์ํธ์์ฉ(ํด๋ฆญ, ์ํ ์ ๋ฐ์ดํธ, ์ ๋๋ฉ์ด์ )์ ์ฒ๋ฆฌํ๊ณ , ํด๋ผ์ด์ธํธ์์ ์คํ๋๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํ์ํ๊ณ , ์ด๊ธฐ ์๋ฒ ๋ ๋๋ง ํ ํ์ด๋๋ ์ด์ ๋ฉ๋๋ค.
RSC์ ํต์ฌ ์ฝ์์ ์ฑ๋ฅ(ํนํ ์ด๊ธฐ ํ์ด์ง ๋ก๋)์ ๊ทน์ ์ธ ํฅ์, ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ฒํค๋ ๊ฐ์, ๊ทธ๋ฆฌ๊ณ ์๋ฒ ์ค์ฌ ๋ก์ง๊ณผ ํด๋ผ์ด์ธํธ ์ค์ฌ ์ํธ์์ฉ ๊ฐ์ ๋ช ํํ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ์ ๋๋ค.
RSC์ ์ ์ง์ ํฅ์: ์์ฐ์ค๋ฌ์ด ์๋์ง
๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๋ ๊ฒฌ๊ณ ํ HTML ์ฐ์ ์ ๊ธฐ์ค์ ์ ์ ๊ณตํจ์ผ๋ก์จ ์ ์ง์ ํฅ์์ ์์น๊ณผ ๋ณธ์ง์ ์ผ๋ก ์ผ์นํฉ๋๋ค. ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
RSC๋ก ๊ตฌ์ถ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ก๋๋ ๋, ์๋ฒ๋ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ HTML๋ก ๋ ๋๋งํฉ๋๋ค. ์ด HTML์ CSS์ ํจ๊ป ์ฆ์ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ก๋ฉ๋๋ค. ์ด ์์ ์์, ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋๋๊ฑฐ๋ ์คํ๋๊ธฐ ์ ์๋ ์ฌ์ฉ์๋ ์์ ํ ํ์ฑ๋๊ณ ์ฝ์ ์ ์์ผ๋ฉฐ ์ข ์ข ํ์ ๊ฐ๋ฅํ ํ์ด์ง๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค. ์ด๊ฒ์ด ์ ์ง์ ํฅ์์ ๊ธฐ๋ฐ์ ๋๋ค โ ํต์ฌ ์ฝํ ์ธ ๊ฐ ๋จผ์ ์ ๋ฌ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ธ ์ ์์๊ฑฐ๋ ์ ํ ํ์ด์ง๋ฅผ ์๊ฐํด ๋ณด์ธ์:
- RSC๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ ์ ํ ์ธ๋ถ ์ ๋ณด(์ด๋ฆ, ์ค๋ช , ๊ฐ๊ฒฉ, ์ด๋ฏธ์ง)๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
- ๊ทธ๋ฐ ๋ค์ ์ด ์ ๋ณด๋ฅผ ํ์ค HTML ํ๊ทธ(
<h1>,<p>,<img>)๋ก ๋ ๋๋งํฉ๋๋ค. - ๊ฒฐ์ ์ ์ผ๋ก, ์๋ฐ์คํฌ๋ฆฝํธ ์์ด๋ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋ฒ ์ก์
์ผ๋ก ์ ์ถ๋๋ '์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธฐ' ๋ฒํผ์ด ์๋
<form>์ ๋ ๋๋งํ ์๋ ์์ต๋๋ค.
์ด ์ด๊ธฐ ์๋ฒ ๋ ๋๋ง๋ HTML ํ์ด๋ก๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฅ์๋์ง ์์ ๋ฒ์ ์ ๋๋ค. ๋น ๋ฅด๊ณ , ๊ฒ์ ์์ง ์นํ์ ์ด๋ฉฐ, ๊ฐ๋ฅํ ๊ฐ์ฅ ๋์ ์ ์ฌ ๊ณ ๊ฐ์๊ฒ ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค. ์น ๋ธ๋ผ์ฐ์ ๋ ์ด HTML์ ์ฆ์ ํ์ฑํ๊ณ ํ์ํ ์ ์์ด, ๋น ๋ฅธ ์ต์ด ์ฝํ ์ธ ํ์ธํธ(FCP)์ ๊ฒฌ๊ณ ํ ์ต๋ ์ฝํ ์ธ ํ์ธํธ(LCP)๋ก ์ด์ด์ง๋๋ค.
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ(`"use client"`๋ก ํ์๋จ)๋ฅผ ์ํ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ด ๋ค์ด๋ก๋๋๊ณ ์คํ๋๋ฉด ํ์ด์ง๊ฐ 'ํ์ด๋๋ ์ด์ '๋ฉ๋๋ค. ํ์ด๋๋ ์ด์ ์ค์ ๋ฆฌ์กํธ๋ ์๋ฒ์์ ๋ ๋๋ง๋ HTML์ ์ธ์ํ๊ณ , ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฒจ๋ถํ๋ฉฐ, ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ํ์ฑํํ์ฌ ์ํธ์์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ญ๋๋ค. ์ด ๊ณ์ธต์ ์ ๊ทผ ๋ฐฉ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ก๋ฉ ๊ณผ์ ์ ๋ชจ๋ ๋จ๊ณ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํ๋ฉฐ, ์ ์ง์ ํฅ์์ ๋ณธ์ง์ ๊ตฌํํฉ๋๋ค.
RSC๋ฅผ ์ด์ฉํ ์ฐ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ ๊ตฌํ
RSC์ ๋งฅ๋ฝ์์ ์ฐ์ํ ์ ํ๋, ์ํธ์์ฉํ๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํจํ๋๋ผ๋ ๊ธฐ๋ณธ ์๋ฒ ์ปดํฌ๋ํธ์ HTML์ด ์ฌ์ ํ ๋ ๋์ ์ด์ง๋ง ๊ธฐ๋ฅ์ ์ธ ๊ฒฝํ์ ์ ๊ณตํ๋๋ก ์ค๊ณํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ์ ์คํ ๊ณํ๊ณผ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ํธ์์ฉ์ ๋ํ ์ดํด๊ฐ ํ์ํฉ๋๋ค.
๊ธฐ๋ณธ ๊ฒฝํ (์๋ฐ์คํฌ๋ฆฝํธ ์์)
RSC์ ์ ์ง์ ํฅ์์ ์ฃผ์ ๋ชฉํ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋นํ์ฑํ๋๊ฑฐ๋ ๋ก๋์ ์คํจํ์ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ฏธ ์๊ณ ๊ธฐ๋ฅ์ ์ธ ๊ฒฝํ์ ์ ๊ณตํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๋ค์์ ์๋ฏธํฉ๋๋ค:
- ํต์ฌ ์ฝํ ์ธ ๊ฐ์์ฑ: ๋ชจ๋ ํ์ ํ ์คํธ, ์ด๋ฏธ์ง ๋ฐ ์ ์ ๋ฐ์ดํฐ๋ ์๋ฒ ์ปดํฌ๋ํธ์ ์ํด ํ์ค HTML๋ก ๋ ๋๋ง๋์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์์ ํ ์ฝ์ ์ ์์ด์ผ ํฉ๋๋ค.
- ํ์ ๊ฐ๋ฅ์ฑ: ๋ชจ๋ ๋ด๋ถ ๋ฐ ์ธ๋ถ ๋งํฌ๋ ํ์ค
<a>ํ๊ทธ์ฌ์ผ ํ๋ฉฐ, ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ผ์ฐํ ์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ์ ์ฒด ํ์ด์ง ์๋ก๊ณ ์นจ์ ํตํด ํ์์ด ์๋ํ๋๋ก ๋ณด์ฅํด์ผ ํฉ๋๋ค. - ํผ ์ ์ถ: ์ค์ํ ํผ(์: ๋ก๊ทธ์ธ, ์ฐ๋ฝ์ฒ, ๊ฒ์, ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธฐ)์ ์๋ฒ ์๋ํฌ์ธํธ(๋ฆฌ์กํธ ์๋ฒ ์ก์
๋ฑ)๋ฅผ ๊ฐ๋ฆฌํค๋ `action` ์์ฑ์ ๊ฐ์ง ๋ค์ดํฐ๋ธ HTML
<form>์์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ํด์ผ ํฉ๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ํผ ์ฒ๋ฆฌ ์์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. - ์ ๊ทผ์ฑ: ์๋งจํฑ HTML ๊ตฌ์กฐ๋ ์คํฌ๋ฆฐ ๋ฆฌ๋ ๋ฐ ๊ธฐํ ๋ณด์กฐ ๊ธฐ์ ์ด ์ฝํ ์ธ ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํด์ํ๊ณ ํ์ํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์: ์ ํ ์นดํ๋ก๊ทธ
RSC๊ฐ ์ ํ ๋ชฉ๋ก์ ๋ ๋๋งํฉ๋๋ค. ๊ฐ ์ ํ์๋ ์ด๋ฏธ์ง, ์ด๋ฆ, ์ค๋ช
๋ฐ ๊ฐ๊ฒฉ์ด ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ธ '์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธฐ' ๋ฒํผ์ ์๋ฒ ์ก์
์ ์ ์ถ๋๋ <form>์ผ๋ก ๊ฐ์ธ์ธ ํ์ค <button>์
๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์์ผ๋ฉด '์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธฐ'๋ฅผ ํด๋ฆญํ๋ฉด ์ ์ฒด ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ๋์ง๋ง ํญ๋ชฉ์ด ์ฑ๊ณต์ ์ผ๋ก ์ถ๊ฐ๋ฉ๋๋ค. ์ฌ์ฉ์๋ ์ฌ์ ํ ๋๋ฌ๋ณด๊ณ ๊ตฌ๋งคํ ์ ์์ต๋๋ค.
ํฅ์๋ ๊ฒฝํ (์๋ฐ์คํฌ๋ฆฝํธ ์ฌ์ฉ ๊ฐ๋ฅ)
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํ์ฑํ๋๊ณ ๋ก๋๋๋ฉด, ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๊ฐ ์ด ๊ธฐ๋ณธ ์์ ์ํธ์์ฉ์ ๊ณ์ธตํํฉ๋๋ค. ์ด๊ฒ์ด ํ๋ ์น ์ ํ๋ฆฌ์ผATION์ ์ง์ ํ ๋งค๋ ฅ์ด ๋น๋๋ ๋ถ๋ถ์ ๋๋ค:
- ๋์ ์ํธ์์ฉ: ๊ฒฐ๊ณผ๋ฅผ ์ฆ์ ์ ๋ฐ์ดํธํ๋ ํํฐ, ์ค์๊ฐ ๊ฒ์ ์ ์, ์ ๋๋ฉ์ด์ ์บ๋ฌ์ , ์ํธ์์ฉ ์ง๋ ๋๋ ๋๋๊ทธ ์ค ๋๋กญ ๊ธฐ๋ฅ์ด ํ์ฑํ๋ฉ๋๋ค.
- ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ผ์ฐํ : ์ ์ฒด ์๋ก๊ณ ์นจ ์์ด ํ์ด์ง ๊ฐ ์ด๋์ผ๋ก ๋ ๋น ๋ฅด๊ณ SPA์ ๊ฐ์ ๋๋์ ์ ๊ณตํฉ๋๋ค.
- ๋๊ด์ UI ์ ๋ฐ์ดํธ: ์๋ฒ ์๋ต ์ ์ ์ฌ์ฉ์ ์์ ์ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ฌ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ๋ณต์กํ ์์ ฏ: ๋ ์ง ์ ํ๊ธฐ, ๋ฆฌ์น ํ ์คํธ ํธ์ง๊ธฐ ๋ฐ ๊ธฐํ ์ ๊ตํ UI ์์.
์์: ํฅ์๋ ์ ํ ์นดํ๋ก๊ทธ
๋์ผํ ์ ํ ์นดํ๋ก๊ทธ ํ์ด์ง์์, `"use client"` ์ปดํฌ๋ํธ๊ฐ ์ ํ ๋ชฉ๋ก์ ๊ฐ์ธ๊ณ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ํํฐ๋ง์ ์ถ๊ฐํฉ๋๋ค. ์ด์ ์ฌ์ฉ์๊ฐ ๊ฒ์ ์์์ ์
๋ ฅํ๊ฑฐ๋ ํํฐ๋ฅผ ์ ํํ๋ฉด ํ์ด์ง ๋ฆฌ๋ก๋ ์์ด ๊ฒฐ๊ณผ๊ฐ ์ฆ์ ์
๋ฐ์ดํธ๋ฉ๋๋ค. '์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธฐ' ๋ฒํผ์ ์ด์ API ํธ์ถ์ ํธ๋ฆฌ๊ฑฐํ๊ณ , ๋ฏธ๋ ์นดํธ ์ค๋ฒ๋ ์ด๋ฅผ ์
๋ฐ์ดํธํ๋ฉฐ, ํ์ด์ง๋ฅผ ๋ฒ์ด๋์ง ์๊ณ ์ฆ๊ฐ์ ์ธ ์๊ฐ์ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์คํจ๋ฅผ ์ํ ์ค๊ณ (์ฐ์ํ ์ ํ)
์ฐ์ํ ์ ํ์ ํต์ฌ์ ํฅ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ด ์คํจํ๋๋ผ๋ ํต์ฌ ๊ธฐ๋ฅ์ ๋ง๊ฐ๋จ๋ฆฌ์ง ์๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ํด๋ฐฑ์ ๊ตฌ์ถํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
- ํผ: AJAX ์ ์ถ์ ์ํํ๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ํผ ํธ๋ค๋ฌ๊ฐ ์๋ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ
<form>์ ์ ํจํ `action` ๋ฐ `method` ์์ฑ์ด ์ฌ์ ํ ์๋์ง ํ์ธํ์ญ์์ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํจํ๋ฉด ํผ์ ์ ํต์ ์ธ ์ ์ฒด ํ์ด์ง ์ ์ถ๋ก ๋๋์๊ฐ์ง๋ง ์ฌ์ ํ ์๋ํฉ๋๋ค. - ๋ด๋น๊ฒ์ด์
: ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ผ์ฐํ
์ด ์๋๋ฅผ ์ ๊ณตํ์ง๋ง, ๋ชจ๋ ๋ด๋น๊ฒ์ด์
์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ค
<a>ํ๊ทธ์ ์์กดํด์ผ ํฉ๋๋ค. ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ผ์ฐํ ์ด ์คํจํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ ์ฒด ํ์ด์ง ๋ด๋น๊ฒ์ด์ ์ ์ํํ์ฌ ์ฌ์ฉ์์ ํ๋ฆ์ ์ ์งํฉ๋๋ค. - ์ํธ์์ฉ ์์: ์์ฝ๋์ธ์ด๋ ํญ๊ณผ ๊ฐ์ ์์์ ๊ฒฝ์ฐ, ์๋ฐ์คํฌ๋ฆฝํธ ์์ด๋ ์ฝํ ์ธ ์ ๊ณ์ ์ ๊ทผํ ์ ์๋๋ก ๋ณด์ฅํด์ผ ํฉ๋๋ค(์: ๋ชจ๋ ์น์ ์ด ๋ณด์ด๊ฑฐ๋ ๊ฐ ํญ์ ๋ํ ๊ฐ๋ณ ํ์ด์ง). ๊ทธ๋ฐ ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ด๋ฅผ ์ํธ์์ฉ ํ ๊ธ๋ก ์ ์ง์ ์ผ๋ก ํฅ์์ํต๋๋ค.
์ด๋ฌํ ๊ณ์ธตํ๋ ์ฌ์ฉ์ ๊ฒฝํ์ด ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๊ณ ๊ฒฌ๊ณ ํ ๊ณ์ธต(RSC์ HTML)์์ ์์ํ์ฌ ์ ์ง์ ์ผ๋ก ํฅ์๋ ๊ธฐ๋ฅ(CSS, ๊ทธ ๋ค์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ ์ํธ์์ฉ)์ ์ถ๊ฐํ๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ค ํฅ์ ๊ณ์ธต์ด ์คํจํ๋๋ผ๋ ์ฌ์ฉ์๋ ์ด์ ์ ์๋ํ๋ ๊ณ์ธต์ผ๋ก ์ฐ์ํ๊ฒ ์ ํ๋์ด ์์ ํ ๊นจ์ง ๊ฒฝํ์ ์ ๋ ๋ง์ฃผํ์ง ์์ต๋๋ค.
๊ฒฌ๊ณ ํ RSC ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ์ค์ฉ์ ์ธ ์ ๋ต
๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๋ก ์ ์ง์ ํฅ์๊ณผ ์ฐ์ํ ์ ํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ๋ ค๋ฉด ๋ค์ ์ ๋ต์ ๊ณ ๋ คํ์ญ์์ค:
RSC์์ ์๋งจํฑ HTML ์ฐ์ ์์ ์ง์
ํญ์ ์๋ฒ ์ปดํฌ๋ํธ๊ฐ ์์ ํ๊ณ ์๋งจํฑ์ ์ผ๋ก ์ฌ๋ฐ๋ฅธ HTML ๊ตฌ์กฐ๋ฅผ ๋ ๋๋งํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ๋ถํฐ ์์ํ์ญ์์ค. ์ด๋ <header>, <nav>, <main>, <section>, <article>, <form>, <button>, <a>์ ๊ฐ์ ์ ์ ํ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด ๊ธฐ๋ฐ์ ๋ณธ์ง์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๊ณ ๊ฒฌ๊ณ ํฉ๋๋ค.
`"use client"`๋ก ์ฑ ์๊ฐ ์๊ฒ ์ํธ์์ฉ ๊ณ์ธตํ
ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์ํธ์์ฉ์ด ์ ๋์ ์ผ๋ก ํ์ํ ๊ณณ์ ์ ํํ ์๋ณํ์ญ์์ค. ๋จ์ํ ๋ฐ์ดํฐ๋ ๋งํฌ๋ฅผ ํ์ํ๋ ์ปดํฌ๋ํธ๋ฅผ `"use client"`๋ก ํ์ํ์ง ๋ง์ญ์์ค. ์๋ฒ ์ปดํฌ๋ํธ๋ก ์ ์งํ ์ ์๋ ๋ถ๋ถ์ด ๋ง์์๋ก ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ฒ๋ค์ ์์์ง๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ์ ๋ ๊ฒฌ๊ณ ํด์ง๋๋ค.
์๋ฅผ ๋ค์ด, ์ ์ ๋ด๋น๊ฒ์ด์ ๋ฉ๋ด๋ RSC์ผ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ๋์ ์ผ๋ก ํํฐ๋งํ๋ ๊ฒ์์ฐฝ์ ์ ๋ ฅ๊ณผ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ํํฐ๋ง ๋ก์ง์ ์ํ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ ์ ์์ง๋ง, ์ด๊ธฐ ๊ฒ์ ๊ฒฐ๊ณผ์ ํผ ์์ฒด๋ ์๋ฒ์์ ๋ ๋๋ง๋ฉ๋๋ค.
ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๊ธฐ๋ฅ์ ์ํ ์๋ฒ ์ฌ์ด๋ ํด๋ฐฑ
์๋ฐ์คํฌ๋ฆฝํธ๋ก ํฅ์๋ ๋ชจ๋ ์ค์ํ ์ฌ์ฉ์ ์์ ์๋ ๊ธฐ๋ฅ์ ์ธ ์๋ฒ ์ฌ์ด๋ ํด๋ฐฑ์ด ์์ด์ผ ํฉ๋๋ค.
- ํผ: ํผ์ AJAX ์ ์ถ์ ์ํ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ `onSubmit` ํธ๋ค๋ฌ๊ฐ ์๋ ๊ฒฝ์ฐ,
<form>์ ์๋ฒ ์๋ํฌ์ธํธ(์: ๋ฆฌ์กํธ ์๋ฒ ์ก์ ๋๋ ์ ํต์ ์ธ API ๋ผ์ฐํธ)๋ฅผ ๊ฐ๋ฆฌํค๋ ์ ํจํ `action` ์์ฑ๋ ์๋์ง ํ์ธํ์ญ์์ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ, ๋ธ๋ผ์ฐ์ ๋ ํ์ค ํผ POST๋ก ํด๋ฐฑํฉ๋๋ค. - ๋ด๋น๊ฒ์ด์
: Next.js์ `next/link`์ ๊ฐ์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ผ์ฐํ
ํ๋ ์์ํฌ๋ ํ์ค
<a>ํ๊ทธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ฉ๋๋ค. ์ด๋ฌํ<a>ํ๊ทธ์ ํญ์ ์ ํจํ `href` ์์ฑ์ด ์๋์ง ํ์ธํ์ญ์์ค. - ๊ฒ์ ๋ฐ ํํฐ๋ง: RSC๋ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์๋ฒ์ ์ ์ถํ์ฌ ์๋ก์ด ๊ฒฐ๊ณผ๋ก ์ ์ฒด ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ๋ ํผ์ ๋ ๋๋งํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๊ฐ ์ฆ์ ๊ฒ์ ์ ์์ด๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ํํฐ๋ง์ผ๋ก ์ด๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋ฎคํ ์ด์ ์ ์ํ ๋ฆฌ์กํธ ์๋ฒ ์ก์ ํ์ฉ
๋ฆฌ์กํธ ์๋ฒ ์ก์ ์ ์๋ฒ์์ ์์ ํ๊ฒ ์คํ๋๋ ํจ์๋ฅผ ์๋ฒ ์ปดํฌ๋ํธ ๋ด์์ ๋๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์๋ ์ง์ ์ ์ํ ์ ์๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋๋ค. ํผ ์ ์ถ ๋ฐ ๋ฐ์ดํฐ ๋ฎคํ ์ด์ ์ ์ด์์ ์ ๋๋ค. ๊ฒฐ์ ์ ์ผ๋ก, HTML ํผ๊ณผ ์ํํ๊ฒ ํตํฉ๋์ด `action` ์์ฑ์ ๋ํ ์๋ฒฝํ ์๋ฒ ์ฌ์ด๋ ํด๋ฐฑ ์ญํ ์ ํฉ๋๋ค.
// app/components/AddToCartButton.js (์๋ฒ ์ปดํฌ๋ํธ)
export async function addItemToCart(formData) {
'use server'; // ์ด ํจ์๋ฅผ ์๋ฒ ์ก์
์ผ๋ก ํ์ํฉ๋๋ค
const productId = formData.get('productId');
// ... ๋ฐ์ดํฐ๋ฒ ์ด์ค/์ธ์
์ ์์ดํ
์ ์ถ๊ฐํ๋ ๋ก์ง ...
console.log(`์๋ฒ์์ ${productId} ์ ํ์ ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐํ์ต๋๋ค.`);
// ์ ํ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฌ๊ฒ์ฆํ๊ฑฐ๋ ๋ฆฌ๋๋ ์
ํฉ๋๋ค
}
export default function AddToCartButton({ productId }) {
return (
<form action={addItemToCart}>
<input type="hidden" name="productId" value={productId} />
<button type="submit">์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธฐ</button>
</form>
);
}
์ด ์์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋นํ์ฑํ๋ ๊ฒฝ์ฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด `addItemToCart` ์๋ฒ ์ก์ ์ ํผ์ด ์ ์ถ๋ฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ ๋ฆฌ์กํธ๋ ์ด ์ ์ถ์ ๊ฐ๋ก์ฑ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ ์ ์ฒด ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด ์๋ฒ ์ก์ ์ ์คํํ ์ ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ์ํ ์๋ฌ ๋ฐ์ด๋๋ฆฌ ๊ณ ๋ ค
RSC๋ ์๋ฒ์์ ์คํ๋๋ฏ๋ก ๋ณธ์ง์ ์ผ๋ก ๊ฒฌ๊ณ ํ์ง๋ง, ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ์ฌ์ ํ ์๋ฐ์คํฌ๋ฆฝํธ ์๋ฌ๋ฅผ ๋ง๋ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ ์ฃผ์์ ๋ฆฌ์กํธ ์๋ฌ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๊ตฌํํ์ฌ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ ์ฐ์ํ๊ฒ ํฌ์ฐฉํ๊ณ ํด๋ฐฑ UI๋ฅผ ํ์ํ์ฌ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ถฉ๋ํ๋ ๊ฒ์ ๋ฐฉ์งํ์ญ์์ค. ์ด๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ณ์ธต์์์ ์ฐ์ํ ์ ํ์ ํ ํํ์ ๋๋ค.
๋ค์ํ ์กฐ๊ฑด์์ ํ ์คํธ
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋นํ์ฑํ๋ ์ํ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํ์ญ์์ค. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฐจ๋จํ๊ฑฐ๋ ์ ์ญ์ ์ผ๋ก ๋นํ์ฑํํ๋ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ค์นํ์ญ์์ค. ๋ค์ํ ๊ธฐ๊ธฐ์ ๋คํธ์ํฌ ์๋์์ ํ ์คํธํ์ฌ ์ค์ ๊ธฐ๋ณธ ๊ฒฝํ์ ์ดํดํ์ญ์์ค. ์ด๋ ์ฐ์ํ ์ ํ ์ ๋ต์ด ํจ๊ณผ์ ์ธ์ง ํ์ธํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ฝ๋ ์์ ๋ฐ ํจํด
์์ 1: ์ฐ์ํ ์ ํ ๊ธฐ๋ฅ์ด ์๋ ๊ฒ์ ์ปดํฌ๋ํธ
๊ธ๋ก๋ฒ ์ ์์๊ฑฐ๋ ์ฌ์ดํธ์ ๊ฒ์์ฐฝ์ ์์ํด ๋ณด์ญ์์ค. ์ฌ์ฉ์๋ค์ ์ฆ๊ฐ์ ์ธ ํํฐ๋ง์ ๊ธฐ๋ํ์ง๋ง, JS๊ฐ ์คํจํ๋๋ผ๋ ๊ฒ์์ ์ฌ์ ํ ์๋ํด์ผ ํฉ๋๋ค.
์๋ฒ ์ปดํฌ๋ํธ (`app/components/SearchPage.js`)
// ์ด๊ฒ์ ์๋ฒ ์ปดํฌ๋ํธ์ด๋ฉฐ, ์๋ฒ์์ ์คํ๋ฉ๋๋ค.
import { performServerSearch } from '../lib/data';
import SearchInputClient from './SearchInputClient'; // ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ
export default async function SearchPage({ searchParams }) {
const query = searchParams.query || '';
const results = await performServerSearch(query); // ์ง์ ์ ์ธ ์๋ฒ ์ฌ์ด๋ ๋ฐ์ดํฐ ํ์นญ
return (
<div>
<h1>์ ํ ๊ฒ์</h1>
{/* ๊ธฐ๋ณธ ํผ: ์๋ฐ์คํฌ๋ฆฝํธ ์ ๋ฌด์ ์๊ด์์ด ์๋ํฉ๋๋ค */}
<form action="/search" method="GET" className="mb-4">
<SearchInputClient initialQuery={query} /> {/* ํฅ์๋ ์
๋ ฅ์ ์ํ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ */}
<button type="submit" className="ml-2 p-2 bg-blue-500 text-white rounded">๊ฒ์</button>
</form>
<h2>"{query}"์ ๋ํ ๊ฒฐ๊ณผ</h2>
{results.length === 0 ? (
<p>์ ํ์ ์ฐพ์ ์ ์์ต๋๋ค.</p>
) : (
<ul className="list-disc pl-5">
{results.map((product) => (
<li key={product.id}>
<h3>{product.name}</h3>
<p>{product.description}</p>
<p><strong>๊ฐ๊ฒฉ: </strong>{product.price.toLocaleString('en-US', { style: 'currency', currency: product.currency })}</p>
</li>
))}
</ul>
)}
</div>
);
}
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ (`app/components/SearchInputClient.js`)
'use client'; // ์ด๊ฒ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์
๋๋ค
import { useState } from 'react';
import { useRouter } from 'next/navigation'; // Next.js ์ฑ ๋ผ์ฐํฐ๋ฅผ ๊ฐ์ ํฉ๋๋ค
export default function SearchInputClient({ initialQuery }) {
const [searchQuery, setSearchQuery] = useState(initialQuery);
const router = useRouter();
const handleInputChange = (e) => {
setSearchQuery(e.target.value);
};
const handleInstantSearch = (e) => {
// JS๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ํผ ์ ์ถ์ ๋ฐฉ์งํฉ๋๋ค
e.preventDefault();
// ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ผ์ฐํ
์ ์ฌ์ฉํ์ฌ URL์ ์
๋ฐ์ดํธํ๊ณ ์๋ฒ ์ปดํฌ๋ํธ ๋ฆฌ๋ ๋๋ง์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค (์ ์ฒด ํ์ด์ง ๋ฆฌ๋ก๋ ์์ด)
router.push(`/search?query=${searchQuery}`);
};
return (
<input
type="search"
name="query" // ์๋ฒ ์ฌ์ด๋ ํผ ์ ์ถ์ ์ค์ํฉ๋๋ค
value={searchQuery}
onChange={handleInputChange}
onKeyUp={handleInstantSearch} // ๋๋ ์ค์๊ฐ ์ ์์ ์ํด ๋๋ฐ์ด์ค๋ฅผ ์ ์ฉํฉ๋๋ค
placeholder="์ ํ ๊ฒ์..."
className="border p-2 rounded w-64"
/>
);
}
์ค๋ช :
- `SearchPage`(RSC)๋ URL `searchParams`๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. `action="/search"`์ `method="GET"`์ผ๋ก `form`์ ๋ ๋๋งํฉ๋๋ค. ์ด๊ฒ์ด ํด๋ฐฑ์ ๋๋ค.
- `SearchInputClient`(ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ)๋ ์ํธ์์ฉ ๊ฐ๋ฅํ ์ ๋ ฅ ํ๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํ์ฑํ๋๋ฉด `handleInstantSearch`(๋๋ ๋๋ฐ์ด์ค๋ ๋ฒ์ )๊ฐ `router.push`๋ฅผ ์ฌ์ฉํ์ฌ URL์ ์ ๋ฐ์ดํธํ๊ณ , ์ด๋ ์ํํธ ๋ด๋น๊ฒ์ด์ ์ ํธ๋ฆฌ๊ฑฐํ์ฌ ์ ์ฒด ํ์ด์ง ๋ฆฌ๋ก๋ ์์ด `SearchPage` RSC๋ฅผ ๋ฆฌ๋ ๋๋งํ์ฌ ์ฆ๊ฐ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋นํ์ฑํ๋๋ฉด `SearchInputClient` ์ปดํฌ๋ํธ๋ ํ์ด๋๋ ์ด์ ๋์ง ์์ต๋๋ค. ์ฌ์ฉ์๋ ์ฌ์ ํ `<input type="search">`์ ์ ๋ ฅํ๊ณ '๊ฒ์' ๋ฒํผ์ ํด๋ฆญํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ฒด ํ์ด์ง ์๋ก๊ณ ์นจ์ ํธ๋ฆฌ๊ฑฐํ์ฌ ํผ์ `/search?query=...`๋ก ์ ์ถํ๊ณ `SearchPage` RSC๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋๋งํฉ๋๋ค. ๊ฒฝํ์ ๋ ์ ์ฐํ์ง๋ง ์์ ํ ๊ธฐ๋ฅํฉ๋๋ค.
์์ 2: ํฅ์๋ ํผ๋๋ฐฑ์ด ์๋ ์ผํ ์นดํธ ๋ฒํผ
์ ์ธ๊ณ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ '์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธฐ' ๋ฒํผ์ ํญ์ ์๋ํด์ผ ํฉ๋๋ค.
์๋ฒ ์ปดํฌ๋ํธ (`app/components/ProductCard.js`)
// ์ฅ๋ฐ๊ตฌ๋์ ์์ดํ
์ถ๊ฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์๋ฒ ์ก์
async function addToCartAction(formData) {
'use server';
const productId = formData.get('productId');
const quantity = parseInt(formData.get('quantity') || '1', 10);
// ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์๋ฎฌ๋ ์ด์
console.log(`์๋ฒ: ์ ํ ${productId} ${quantity}๊ฐ๋ฅผ ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ ์ค์
๋๋ค.`);
// ์ค์ ์ฑ์์๋: ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ธ์
๋ฑ ์
๋ฐ์ดํธ
// await db.cart.add({ userId: currentUser.id, productId, quantity });
// ์ ํ์ ์ผ๋ก ๊ฒฝ๋ก ์ฌ๊ฒ์ฆ ๋๋ ๋ฆฌ๋๋ ์
// revalidatePath('/cart');
// redirect('/cart');
}
// ์ ํ ์นด๋๋ฅผ ์ํ ์๋ฒ ์ปดํฌ๋ํธ
export default function ProductCard({ product }) {
return (
<div className="border p-4 rounded shadow">
<h3>{product.name}</h3>
<p>{product.description}</p>
<p><strong>๊ฐ๊ฒฉ:</strong> {product.price.toLocaleString('en-US', { style: 'currency', currency: product.currency })}</p>
{/* ํด๋ฐฑ์ผ๋ก ์๋ฒ ์ก์
์ ์ฌ์ฉํ๋ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธฐ ๋ฒํผ */}
<form action={addToCartAction}>
<input type="hidden" name="productId" value={product.id} />
<button type="submit" className="bg-green-500 text-white p-2 rounded mt-2">
์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธฐ (์๋ฒ ํด๋ฐฑ)
</button>
</form>
{/* ํฅ์๋ ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ ๊ฒฝํ์ ์ํ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ (์ ํ ์ฌํญ) */}
<AddToCartClientButton productId={product.id} />
</div>
);
}
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ (`app/components/AddToCartClientButton.js`)
'use client';
import { useState } from 'react';
// ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ์๋ฒ ์ก์
์ ํธ์ถํ ์ ์์ผ๋ฏ๋ก ์ํฌํธํฉ๋๋ค
import { addToCartAction } from './ProductCard';
export default function AddToCartClientButton({ productId }) {
const [isAdding, setIsAdding] = useState(false);
const [feedback, setFeedback] = useState('');
const handleAddToCart = async () => {
setIsAdding(true);
setFeedback('์ถ๊ฐ ์ค...');
const formData = new FormData();
formData.append('productId', productId);
formData.append('quantity', '1'); // ์์ ์๋
try {
await addToCartAction(formData); // ์๋ฒ ์ก์
์ ์ง์ ํธ์ถํฉ๋๋ค
setFeedback('์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ๋์์ต๋๋ค!');
// ์ค์ ์ฑ์์๋: ๋ก์ปฌ ์ฅ๋ฐ๊ตฌ๋ ์ํ ์
๋ฐ์ดํธ, ๋ฏธ๋ ์นดํธ ํ์ ๋ฑ
} catch (error) {
console.error('์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ ์คํจ:', error);
setFeedback('์ถ๊ฐ์ ์คํจํ์ต๋๋ค. ๋ค์ ์๋ํด ์ฃผ์ธ์.');
} finally {
setIsAdding(false);
setTimeout(() => setFeedback(''), 2000); // ์ผ์ ์๊ฐ ํ ํผ๋๋ฐฑ ์ง์ฐ๊ธฐ
}
};
return (
<div>
<button
onClick={handleAddToCart}
disabled={isAdding}
className="bg-blue-500 text-white p-2 rounded mt-2 ml-2"
>
{isAdding ? '์ถ๊ฐ ์ค...' : '์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธฐ (ํฅ์๋จ)'}
</button>
{feedback && <p className="text-sm mt-1">{feedback}</p>}
</div>
);
}
์ค๋ช :
- `ProductCard`(RSC)๋ `addToCartAction` ์๋ฒ ์ก์ ์ ์ฌ์ฉํ๋ ๊ฐ๋จํ `<form>`์ ํฌํจํฉ๋๋ค. ์ด ํผ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ด ์๋ฒฝํ๊ฒ ์๋ํ์ฌ ์ ์ฒด ํ์ด์ง ์ ์ถ์ ํตํด ํญ๋ชฉ์ ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐํฉ๋๋ค.
- `AddToCartClientButton`(ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ)๋ ํฅ์๋ ๊ฒฝํ์ ์ถ๊ฐํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ ์ด ๋ฒํผ์ ํด๋ฆญํ๋ฉด `handleAddToCart`๊ฐ ํธ๋ฆฌ๊ฑฐ๋์ด ๋์ผํ `addToCartAction`์ ์ง์ ํธ์ถํ๊ณ (์ ์ฒด ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด), ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ(์: '์ถ๊ฐ ์ค...')์ ํ์ํ๋ฉฐ, UI๋ฅผ ๋๊ด์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋นํ์ฑํ๋๋ฉด `AddToCartClientButton`์ ๋ ๋๋ง๋๊ฑฐ๋ ํ์ด๋๋ ์ด์ ๋์ง ์์ต๋๋ค. ์ฌ์ฉ์๋ ์ฌ์ ํ ์๋ฒ ์ปดํฌ๋ํธ์ ๊ธฐ๋ณธ `<form>`์ ์ฌ์ฉํ์ฌ ์ฅ๋ฐ๊ตฌ๋์ ํญ๋ชฉ์ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ฐ์ํ ์ ํ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ์ด์ (๊ธ๋ก๋ฒ ๊ด์ )
์ ์ง์ ํฅ์๊ณผ ์ฐ์ํ ์ ํ๋ฅผ ์ํด RSC๋ฅผ ์ฑํํ๋ ๊ฒ์ ํนํ ๊ธ๋ก๋ฒ ๊ณ ๊ฐ์๊ฒ ์๋นํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ๋ณดํธ์ ์ ๊ทผ์ฑ: ๊ฒฌ๊ณ ํ HTML ๊ธฐ๋ฐ์ ์ ๊ณตํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํ ๋ธ๋ผ์ฐ์ , ๋ณด์กฐ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ๋๋ ์๋์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋นํ์ฑํํ๊ณ ๋ธ๋ผ์ฐ์งํ๋ ์ฌ์ฉ์์๊ฒ ์ ๊ทผ ๊ฐ๋ฅํด์ง๋๋ค. ์ด๋ ๋ค์ํ ์ธ๊ตฌ ํต๊ณ ๋ฐ ์ง์ญ์ ๊ฑธ์ณ ์ ์ฌ์ ์ธ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ํฌ๊ฒ ํ์ฅํฉ๋๋ค.
- ๋ฐ์ด๋ ์ฑ๋ฅ: ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ์ค์ด๊ณ ๋ ๋๋ง์ ์๋ฒ๋ก ์คํ๋ก๋ํ๋ฉด ์ด๊ธฐ ํ์ด์ง ๋ก๋๊ฐ ๋นจ๋ผ์ง๊ณ ์ฝ์ด ์น ๋ฐ์ดํ(LCP, FID ๋ฑ)์ด ๊ฐ์ ๋๋ฉฐ ์ฌ์ฉ์ ๊ฒฝํ์ด ๋ ๋นจ๋ผ์ง๋๋ค. ์ด๋ ๋ง์ ์ ํฅ ์์ฅ์์ ํํ ๋ณผ ์ ์๋ ๋๋ฆฐ ๋คํธ์ํฌ๋ ์ฑ๋ฅ์ด ๋ฎ์ ์ฅ์น๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์์๊ฒ ํนํ ์ค์ํฉ๋๋ค.
- ํฅ์๋ ๊ฒฌ๊ณ ์ฑ: ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐํ์ ์ธ ๋คํธ์ํฌ ์ฐ๊ฒฐ, ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ฅ ๋๋ ํด๋ผ์ด์ธํธ ์ธก ์คํฌ๋ฆฝํธ ์ฐจ๋จ๊ธฐ์ ๊ฐ์ ๋ถ๋ฆฌํ ์กฐ๊ฑด์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ํ๋ฅผ ์ ์งํฉ๋๋ค. ์ฌ์ฉ์๋ ๊ฒฐ์ฝ ๋น ํ์ด์ง๋ ์์ ํ ๊นจ์ง ํ์ด์ง์ ์ง๋ฉดํ์ง ์์ผ๋ฏ๋ก ์ ๋ขฐ๋ฅผ ๊ตฌ์ถํ๊ณ ์ข์ ๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค.
- ๊ฐ์ ๋ SEO: ๊ฒ์ ์์ง์ ์๋ฒ์์ ๋ ๋๋ง๋ HTML ์ฝํ ์ธ ๋ฅผ ์์ ์ ์ผ๋ก ํฌ๋กค๋งํ๊ณ ์ธ๋ฑ์ฑํ ์ ์์ด ์ ํ๋ฆฌ์ผ์ด์ ์ฝํ ์ธ ์ ๊ฒ์ ๊ฐ๋ฅ์ฑ๊ณผ ์์๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ๋น์ฉ ํจ์จ์ฑ: ๋ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ๋ ์ ์ ๋ฐ์ดํฐ ์ ์ก์ ์๋ฏธํ๋ฉฐ, ์ด๋ ์ข ๋์ ๋ฐ์ดํฐ ์๊ธ์ ๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ ๋ฐ์ดํฐ๊ฐ ๋น์ผ ์ง์ญ์ ์ฌ์ฉ์์๊ฒ ์ค์ง์ ์ธ ๋น์ฉ ์ ๊ฐ์ด ๋ ์ ์์ต๋๋ค.
- ๋ช ํํ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ: RSC๋ ์๋ฒ ์ธก ๋ก์ง(๋ฐ์ดํฐ ํ์นญ, ๋น์ฆ๋์ค ๋ก์ง)์ด ํด๋ผ์ด์ธํธ ์ธก ์ํธ์์ฉ(UI ํจ๊ณผ, ์ํ ๊ด๋ฆฌ)๊ณผ ๊ตฌ๋ณ๋๋ ๋ ๊น๋ํ ์ํคํ ์ฒ๋ฅผ ์ฅ๋ คํฉ๋๋ค. ์ด๋ ๋ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ฝ๋๋ฒ ์ด์ค๋ก ์ด์ด์ง ์ ์์ผ๋ฉฐ, ์ฌ๋ฌ ์๊ฐ๋์ ๊ฑธ์ณ ๋ถ์ฐ๋ ๊ฐ๋ฐํ์ ์ ์ตํฉ๋๋ค.
- ํ์ฅ์ฑ: CPU ์ง์ฝ์ ์ธ ๋ ๋๋ง ์์ ์ ์๋ฒ๋ก ์คํ๋ก๋ํ๋ฉด ํด๋ผ์ด์ธํธ ์ฅ์น์ ๊ณ์ฐ ๋ถ๋ด์ ์ค์ฌ ๋ ๋์ ๋ฒ์์ ํ๋์จ์ด์์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋์ ๊ณผ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ
์ด์ ์ ๊ฐ๋ ฅํ์ง๋ง, RSC์ ์ด ์ ์ง์ ํฅ์ ์ ๊ทผ ๋ฐฉ์์ ์ฑํํ๋ ๋ฐ์๋ ๋๋ฆ์ ๋์ ๊ณผ์ ๊ฐ ๋ฐ๋ฆ ๋๋ค:
- ํ์ต ๊ณก์ : ์ ํต์ ์ธ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ฆฌ์กํธ ๊ฐ๋ฐ์ ์ต์ํ ๊ฐ๋ฐ์๋ค์ ์๋ก์ด ํจ๋ฌ๋ค์, ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ๊ตฌ๋ณ, ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ ํ์นญ ๋ฐ ๋ฎคํ ์ด์ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ดํดํด์ผ ํฉ๋๋ค.
- ์ํ ๊ด๋ฆฌ ๋ณต์ก์ฑ: ์ํ๊ฐ ์๋ฒ(URL ๋งค๊ฐ๋ณ์, ์ฟ ํค ๋๋ ์๋ฒ ์ก์ ์ ํตํด)์ ์ํ๋์ง ํด๋ผ์ด์ธํธ์ ์ํ๋์ง ๊ฒฐ์ ํ๋ ๊ฒ์ ์ด๊ธฐ ๋ณต์ก์ฑ์ ์ผ๊ธฐํ ์ ์์ต๋๋ค. ์ ์คํ ๊ณํ์ด ํ์ํฉ๋๋ค.
- ์๋ฒ ๋ถํ ์ฆ๊ฐ: RSC๋ ํด๋ผ์ด์ธํธ ์์ ์ ์ค์ด์ง๋ง, ๋ ๋ง์ ๋ ๋๋ง ๋ฐ ๋ฐ์ดํฐ ํ์นญ ์์ ์ ์๋ฒ๋ก ์ด์ ํฉ๋๋ค. ์ ์ ํ ์๋ฒ ์ธํ๋ผ์ ํ์ฅ์ด ๋์ฑ ์ค์ํด์ง๋๋ค.
- ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ ์กฐ์ : ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ถํ๋ ์ฌ๊ณ ๋ฐฉ์์ด ์ ์ํด์ผ ํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์ฝํ ์ธ ์ ๋ํด '์๋ฒ ์ฐ์ ', ์ํธ์์ฉ์ ๋ํด 'ํด๋ผ์ด์ธํธ ๋์ค'์ผ๋ก ์๊ฐํด์ผ ํฉ๋๋ค.
- ํ ์คํธ ์๋๋ฆฌ์ค: ์๋ฐ์คํฌ๋ฆฝํธ ์ ๋ฌด, ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด ๋ฐ ๋ค์ํ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ํฌํจํ๋๋ก ํ ์คํธ ๋งคํธ๋ฆญ์ค๋ฅผ ํ์ฅํด์ผ ํฉ๋๋ค.
- ๋ฒ๋ค๋ง ๋ฐ ํ์ด๋๋ ์ด์ ๊ฒฝ๊ณ: `"use client"` ๊ฒฝ๊ณ๊ฐ ์ด๋์ ์๋์ง ์ ์ํ๋ ๊ฒ์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ต์ํํ๊ณ ํ์ด๋๋ ์ด์ ์ ์ต์ ํํ๊ธฐ ์ํด ์ ์คํ ๊ณ ๋ ค๊ฐ ํ์ํฉ๋๋ค. ๊ณผ๋ํ ํ์ด๋๋ ์ด์ ์ ์ผ๋ถ ์ฑ๋ฅ ์ด์ ์ ์์ํ ์ ์์ต๋๋ค.
์ ์ง์ RSC ๊ฒฝํ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
RSC๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ง์ ํฅ์๊ณผ ์ฐ์ํ ์ ํ์ ์ด์ ์ ๊ทน๋ํํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํ์ญ์์ค:
- 'JS ์์'์ ๋จผ์ ์ค๊ณํ์ญ์์ค: ์๋ก์ด ๊ธฐ๋ฅ์ ๊ตฌ์ถํ ๋, ๋จผ์ HTML๊ณผ CSS๋ง์ผ๋ก ์ด๋ป๊ฒ ์๋ํ ์ง ์์ํด ๋ณด์ญ์์ค. ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ ๊ธฐ์ค์ ์ ๊ตฌํํ์ญ์์ค. ๊ทธ๋ฐ ๋ค์ ์ ์ง์ ์ผ๋ก ํฅ์์ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ์ญ์์ค.
- ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ต์ํ: ์ง์ ์ผ๋ก ์ํธ์์ฉ, ์ํ ๊ด๋ฆฌ ๋๋ ๋ธ๋ผ์ฐ์ ๋ณ API๊ฐ ํ์ํ ์ปดํฌ๋ํธ์๋ง `"use client"`๋ฅผ ์ฌ์ฉํ์ญ์์ค. ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ ํ ์๊ณ ์๊ฒ ์ ์งํ์ญ์์ค.
- ๋ฎคํ ์ด์ ์ ์ํด ์๋ฒ ์ก์ ํ์ฉ: ๋ชจ๋ ๋ฐ์ดํฐ ๋ฎคํ ์ด์ (ํผ ์ ์ถ, ์ ๋ฐ์ดํธ, ์ญ์ )์ ์๋ฒ ์ก์ ์ ์ฑํํ์ญ์์ค. ์ด๋ JS ์๋ ์๋๋ฆฌ์ค์ ๋ํ ๋ด์ฅ ํด๋ฐฑ์ ํตํด ๋ฐฑ์๋์ ์ํธ์์ฉํ๋ ์ง์ ์ ์ด๊ณ ์์ ํ๋ฉฐ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
- ์ ๋ต์ ํ์ด๋๋ ์ด์ : ํ์ด๋๋ ์ด์ ์ด ์ธ์ ์ด๋์ ๋ฐ์ํ๋์ง ์ ์ํ์ญ์์ค. ์ํธ์์ฉ์ด ํ์ํ์ง ์์ UI์ ํฐ ๋ถ๋ถ์ ๋ถํ์ํ๊ฒ ํ์ด๋๋ ์ด์ ํ์ง ๋ง์ญ์์ค. RSC ๊ธฐ๋ฐ ๋๊ตฌ ๋ฐ ํ๋ ์์ํฌ(Next.js ์ฑ ๋ผ์ฐํฐ ๋ฑ)๋ ์ข ์ข ์ด๋ฅผ ์๋์ผ๋ก ์ต์ ํํ์ง๋ง, ๊ธฐ๋ณธ ๋ฉ์ปค๋์ฆ์ ์ดํดํ๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค.
- ์ฝ์ด ์น ๋ฐ์ดํ ์ฐ์ ์์ ์ง์ : Lighthouse๋ WebPageTest์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ์ด ์น ๋ฐ์ดํ(LCP, FID, CLS)์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ญ์์ค. RSC๋ ์ด๋ฌํ ์งํ๋ฅผ ๊ฐ์ ํ๋๋ก ์ค๊ณ๋์์ง๋ง, ์ ์ ํ ๊ตฌํ์ด ํต์ฌ์ ๋๋ค.
- ๋ช ํํ ์ฌ์ฉ์ ํผ๋๋ฐฑ ์ ๊ณต: ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ํฅ์์ด ๋ก๋ฉ ์ค์ด๊ฑฐ๋ ์คํจํ ๋ ์ฌ์ฉ์๊ฐ ๋ช ํํ๊ณ ๋ฐฉํด๋์ง ์๋ ํผ๋๋ฐฑ์ ๋ฐ๋๋ก ํ์ญ์์ค. ์ด๋ ๋ก๋ฉ ์คํผ๋, ๋ฉ์์ง ๋๋ ๋จ์ํ ์๋ฒ ์ฌ์ด๋ ํด๋ฐฑ์ด ์ํํ๊ฒ ์ธ๊ณ๋ฐ๋๋ก ํ๋ ๊ฒ์ผ ์ ์์ต๋๋ค.
- ํ ๊ต์ก: ํ์ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์๋ฒ ์ปดํฌ๋ํธ/ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ๊ตฌ๋ณ๊ณผ ์ ์ง์ ํฅ์์ ์์น์ ์ดํดํ๋๋ก ํ์ญ์์ค. ์ด๋ ์ผ๊ด๋๊ณ ๊ฒฌ๊ณ ํ ๊ฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ์กฐ์ฑํฉ๋๋ค.
RSC์ ์ ์ง์ ํฅ์์ ํตํ ์น ๊ฐ๋ฐ์ ๋ฏธ๋
๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๋ ๋จ์ง ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ ์ด์์ ์๋ฏธํฉ๋๋ค; ์ด๋ ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ป๊ฒ ๊ตฌ์ถํ ์ ์๋์ง์ ๋ํ ๊ทผ๋ณธ์ ์ธ ์ฌํ๊ฐ์ ๋๋ค. ์ด๋ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ๊ฐ์ ์ธ ์ฑ๋ฅ, SEO, ๋ณด์ ๋ฐ ๋ณดํธ์ ์ ๊ทผ์ฑ์ผ๋ก์ ํ๊ท๋ฅผ ์๋ฏธํ์ง๋ง, ๋ฆฌ์กํธ์ ์ฌ๋๋ฐ๋ ๊ฐ๋ฐ์ ๊ฒฝํ๊ณผ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ํฌ๊ธฐํ์ง ์์ต๋๋ค.
์ด ํจ๋ฌ๋ค์ ์ ํ์ ๊ฐ๋ฐ์๋ค์ด ๋ณธ์ง์ ์ผ๋ก ๋ ๊ฒฌ๊ณ ํ๊ณ ์ฌ์ฉ์ ์ค์ฌ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋๋ก ์ฅ๋ คํฉ๋๋ค. ์ด๋ '์๋ฐ์คํฌ๋ฆฝํธ ์๋๋ฉด ๋ง๊ณ '๋ผ๋ ์ฌ๊ณ ๋ฐฉ์์์ ๋ฒ์ด๋ ๋ ํฌ๊ด์ ์ด๊ณ ๊ณ์ธต์ ์ธ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๋์๊ฐ๋๋ก ์ฐ๋ฆฌ๋ฅผ ๋ฐ์ด๋ถ์ ๋๋ค. ์น์ด ์๋ก์ด ์ฅ์น, ๋ค์ํ ๋คํธ์ํฌ ์ธํ๋ผ, ์งํํ๋ ์ฌ์ฉ์ ๊ธฐ๋๋ก ์ ์ธ๊ณ์ ์ผ๋ก ๊ณ์ ํ์ฅ๋จ์ ๋ฐ๋ผ RSC๊ฐ ์ง์งํ๋ ์์น์ ์ ์ ๋ ์ค์ํด์ง๊ณ ์์ต๋๋ค.
RSC์ ์ ๊ณํ๋ ์ ์ง์ ํฅ์ ์ ๋ต์ ์กฐํฉ์ ๊ฐ๋ฐ์๋ค์ด ๊ณ ๊ธ ์ฌ์ฉ์์๊ฒ๋ ๋๋ถ์๊ฒ ๋น ๋ฅด๊ณ ๊ธฐ๋ฅ์ด ํ๋ถํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํ ๋ฟ๋ง ์๋๋ผ, ๋ค๋ฅธ ๋ชจ๋ ์ฌ๋์๊ฒ๋ ์์ ์ ์ผ๋ก ๊ธฐ๋ฅํ๊ณ ์ ๊ทผ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํ ์ ์๋๋ก ํ์ ์ค์ด์ค๋๋ค. ์ด๋ ๋จ์ง ์ด์์ ์ธ ์กฐ๊ฑด๋ง์ด ์๋, ์ธ๊ฐ๊ณผ ๊ธฐ์ ์ ๋ชจ๋ ์คํํธ๋ผ์ ์ํด ๊ตฌ์ถํ๋ ๊ฒ์ ๊ดํ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก : ๊ฒฌ๊ณ ํ๊ณ ์ฑ๋ฅ ์ข์ ์น ๊ตฌ์ถ
์ง์ ์ผ๋ก ๊ธ๋ก๋ฒํ๊ณ ๊ฒฌ๊ณ ํ ์น์ ๊ตฌ์ถํ๊ธฐ ์ํ ์ฌ์ ์๋ ์ ์ง์ ํฅ์ ๋ฐ ์ฐ์ํ ์ ํ์ ๊ฐ์ ๊ธฐ๋ณธ ์์น์ ๋ํ ํ์ ์ด ํ์ํฉ๋๋ค. ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๋ ๋ฆฌ์กํธ ์ํ๊ณ ๋ด์์ ์ด๋ฌํ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๊ฐ๋ ฅํ๊ณ ํ๋์ ์ธ ํดํท์ ์ ๊ณตํฉ๋๋ค.
์๋ฒ ์ปดํฌ๋ํธ๋ก๋ถํฐ ๊ฒฌ๊ณ ํ HTML ๊ธฐ์ค์ ์ ์ฐ์ ์ํ๊ณ , ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ์ฑ ์๊ฐ ์๊ฒ ์ํธ์์ฉ์ ๊ณ์ธตํํ๋ฉฐ, ์ค์ํ ์์ ์ ๋ํ ๊ฒฌ๊ณ ํ ์๋ฒ ์ฌ์ด๋ ํด๋ฐฑ์ ์ค๊ณํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ค์ ๋ค์๊ณผ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค:
- ๋ ๋น ๋ฅธ ์๋: ๊ฐ์๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ ๋น ๋ฅธ ์ด๊ธฐ ๋ก๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๋ ๋์ ์ ๊ทผ์ฑ: ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ฅ๋ ฅ๊ณผ ๊ด๊ณ์์ด ๋ชจ๋ ์ฌ์ฉ์๋ฅผ ์ํ ๊ธฐ๋ฅ์ ๊ฒฝํ.
- ๋์ ๊ฒฌ๊ณ ์ฑ: ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด๊ณผ ์ ์ฌ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ์คํจ์ ์ฐ์ํ๊ฒ ์ ์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ .
- SEO ์นํ์ : ๊ฒ์ ์์ง์ ์ํ ์ ๋ขฐํ ์ ์๋ ์ฝํ ์ธ ๊ฒ์ ๊ฐ๋ฅ์ฑ.
์ด ์ ๊ทผ ๋ฐฉ์์ ์ฑํํ๋ ๊ฒ์ ๋จ์ง ์ฑ๋ฅ์ ์ต์ ํํ๋ ๊ฒ์ ๊ดํ ๊ฒ์ด ์๋๋๋ค; ์ด๋ ํฌ์ฉ์ฑ์ ์ํด ๊ตฌ์ถํ๋ ๊ฒ์ด๋ฉฐ, ์ ์ธ๊ณ ์ด๋ ๊ณณ์์๋ , ์ด๋ค ์ฅ์น์์๋ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ฐ๋ฆฌ๊ฐ ๋ง๋๋ ๋์งํธ ๊ฒฝํ์ ์ ๊ทผํ๊ณ ์๋ฏธ ์๊ฒ ์ํธ์์ฉํ ์ ์๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ๋๋ค. ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ์น ๊ฐ๋ฐ์ ๋ฏธ๋๋ ๋ชจ๋๋ฅผ ์ํ ๋ ๊ฒฌ๊ณ ํ๊ณ , ๊ณตํํ๋ฉฐ, ๊ถ๊ทน์ ์ผ๋ก ๋ ์ฑ๊ณต์ ์ธ ์น์ ํฅํ๊ณ ์์ต๋๋ค.